iT邦幫忙

2022 iThome 鐵人賽

DAY 5
0

內容

  1. 彩色圖像轉灰階

    1.1 程式碼

    • cv2.imread讀取圖檔時轉換為灰階
      import cv2
      
      # 顯示圖檔
      def show_img(name, img):
          cv2.imshow(name, img)
          cv2.waitKey(0)
      
      image_path = './over_brain.jpg'
      image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
      image = cv2.resize(image, (250, 250))
      show_img('gray1', image)
      
    • cv2.cvtColor轉換為灰階
      import cv2
      
      # 顯示圖檔
      def show_img(name, img):
          cv2.imshow(name, img)
          cv2.waitKey(0)
      
      image_path = './over_brain.jpg'
      image = cv2.imread(image_path)
      image = cv2.resize(image, (250, 250))
      show_img('origin', image)
      image1 = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
      show_img('gray2', image1)   
      

    1.2 執行結果

  2. 彩色圖像二值化

    2.1 程式碼

    import cv2
    
    # 顯示圖檔
    def show_img(name, img):
        cv2.imshow(name, img)
        cv2.waitKey(0)
    
    image_path = './over_brain.jpg'
    image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
    image = cv2.resize(image, (280, 280))
    show_img('gray1', image)
    
    ret1,mask1 = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
    show_img('BINARY', mask1)
    ret2,mask2 = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY_INV)
    show_img('BINARY_INV', mask2)
    ret3,mask3 = cv2.threshold(image, 127, 255, cv2.THRESH_TRUNC)
    show_img('TRUNC', mask3)
    ret4,mask4 = cv2.threshold(image, 127, 255, cv2.THRESH_TOZERO)
    show_img('TOZERO', mask4)
    ret5,mask5 = cv2.threshold(image, 127, 255, cv2.THRESH_TOZERO_INV)
    show_img('TOZERO_INV', mask5)
    

    2.2 二值化參數(中文表格來自於STEAM 教育學習網)

    2.3 執行結果

  3. 侵蝕膨脹

    3.1 影像侵蝕:以Kernel(卷積核)滑動進行卷積運算,使影像中白色區域縮小、黑色區域擴大。

    • 用途:可用於去除影像中的噪點或加粗字跡。

    • 程式碼

      import cv2
      import numpy as np
      
      # 顯示圖檔
      def show_img(name, img):
          cv2.imshow(name, img)
          cv2.waitKey(0)
      
      image_path = './over_brain.jpg'
      image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
      image = cv2.resize(image, (300, 300))
      show_img('origin', image)
      
      kernel = np.ones((3, 3), np.uint8)
      erode_image = cv2.erode(image, kernel, iterations=1)
      show_img('erode_image', erode_image)
      
    • 執行結果

      • 字跡加粗
      • 大腦圖示中的皺褶變少

    3.2 膨脹:以Kernel(卷積核)滑動進行卷積運算,使影像中白色區域擴大、黑色區域縮小。

    • 用途:可用於填補影像中的小孔洞或使字跡變細。

    • 程式碼

      import cv2
      import numpy as np
      
      # 顯示圖檔
      def show_img(name, img):
          cv2.imshow(name, img)
          cv2.waitKey(0)
      
      image_path = './over_brain.jpg'
      image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
      image = cv2.resize(image, (300, 300))
      show_img('origin', image)
      
      kernel = np.ones((3, 3), np.uint8)
      dilate_image = cv2.dilate(image, kernel, iterations=1)
      show_img('dilate_image', dilate_image)  
      
    • 執行結果

      • 字跡變細
      • 「管理」和「稍後再說」間界線變淡


小結

  1. 今天,我們分享了彩色圖片轉灰階、二值化,及影像侵蝕、膨脹。
  2. 下一站,我們前往「OpenCV影像處理(四)」:進階的開閉運算與濾波器的比較。

讓我們繼續看下去...


參考資料

  1. opencv-python中的腐蚀与膨胀函数
  2. OpenCV Image Thresholding

上一篇
《第4天》OpenCV影像處理(二)
下一篇
《第6天》OpenCV影像處理(四)
系列文
Object Detection and Image Processing with Python30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言